package comp.racer.so;

import comp.racer.common.interfaces.ClienteIF;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author italo
 */
public class ServidorThread extends Thread {

    private ClienteIF cliente;
    private Method runMetodo;
    private Object[] parametros;

    public ServidorThread(ClienteIF cliente, Method runMetodo, Object... parametros) {
        this.cliente = cliente;
        this.runMetodo = runMetodo;
        this.parametros = parametros;
    }

    @Override
    public void run(){
        try {

            getRunMetodo().invoke( getCliente(), getParametros() );

        } catch (IllegalAccessException ex) {
            Logger.getLogger(ServidorThread.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(ServidorThread.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(ServidorThread.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    // getters e setters
    public ClienteIF getCliente() {
        return cliente;
    }

    public void setCliente(ClienteIF cliente) {
        this.cliente = cliente;
    }

    public Method getRunMetodo() {
        return runMetodo;
    }

    public void setRunMetodo(Method runMetodo) {
        this.runMetodo = runMetodo;
    }

    public Object[] getParametros() {
        return parametros;
    }

    public void setParametros(Object[] parametros) {
        this.parametros = parametros;
    }



}
